package br.com.requisicao.compra.service.impl;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

import br.com.requisicao.compra.canonico.Fornecedor;
import br.com.requisicao.compra.canonico.RequisicaoCompra;
import br.com.requisicao.compra.canonico.RequisicaoCompraProduto;
import br.com.requisicao.compra.constantes.ConstantesMensagensSucesso;
import br.com.requisicao.compra.dao.IFornecedorDAO;
import br.com.requisicao.compra.dao.impl.FornecedorDAO;
import br.com.requisicao.compra.exception.BeanException;
import br.com.requisicao.compra.service.IFornecedorService;
import br.com.requisicao.compra.service.IRequisicaoCompraProdutoService;
import br.com.requisicao.compra.service.IRequisicaoCompraService;



public class FornecedorService implements IFornecedorService {

	private IFornecedorDAO fornecedorDAO;
	private IRequisicaoCompraProdutoService requisicaoCompraProdutoService;

	public void salvar(Fornecedor fornecedor) throws BeanException {
		this.fornecedorDAO = new FornecedorDAO();
		try {
			fornecedorDAO.salvar(fornecedor);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public Fornecedor pesquisarPorId(Long codigo) {
		this.fornecedorDAO = new FornecedorDAO();
		Fornecedor fornecedor = null;
		try {
			fornecedor = fornecedorDAO.pesquisarPorId(codigo);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return fornecedor;
	}

	public List<Fornecedor> obtermFornecedor() {
		this.fornecedorDAO = new FornecedorDAO();
		List<Fornecedor> fornecedor = null;
		try {
			fornecedor = fornecedorDAO.obtermFornecedor();
		} catch (Exception e) {
			e.printStackTrace();
		}

		return fornecedor;
	}

	public Fornecedor obtemFornecedorPorId(Long codigo) {
		this.fornecedorDAO = new FornecedorDAO();
		Fornecedor fornecedor = null;
		try {
			fornecedor = fornecedorDAO.obtemFornecedorPorId(codigo);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return fornecedor;
	}

	public Boolean excluir(Fornecedor fornecedor) throws BeanException {
		FacesContext context = FacesContext.getCurrentInstance();
		Boolean deletou = false;
		this.fornecedorDAO = new FornecedorDAO();
		this.requisicaoCompraProdutoService = new RequisicaoCompraProdutoService();

		RequisicaoCompraProduto requisicaoCompraProduto = null;

		try {

			requisicaoCompraProduto = requisicaoCompraProdutoService.obtemPorIdFornecedor(fornecedor.getCodigo());

			if (requisicaoCompraProduto != null) {

				FacesMessage msg = new FacesMessage(
						ConstantesMensagensSucesso.FORNECEDOR_RELACIONADO_REQUISICAO_COMPRA);
				msg.setSeverity(FacesMessage.SEVERITY_ERROR);
				context.addMessage(null, msg);

			} else {
				fornecedor = fornecedorDAO.excluir(fornecedor);

				deletou = true;

				FacesMessage msg = new FacesMessage(
						ConstantesMensagensSucesso.FORNECEDOR_EXCLUIDA_SUCESSO);
				msg.setSeverity(FacesMessage.SEVERITY_INFO);
				context.addMessage(null, msg);
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

		return deletou;

	}

	/**
	 * @return the fornecedorDAO
	 */
	public IFornecedorDAO getFornecedorDAO() {
		return fornecedorDAO;
	}

	/**
	 * @param fornecedorDAO
	 *            the fornecedorDAO to set
	 */
	public void setFornecedorDAO(IFornecedorDAO fornecedorDAO) {
		this.fornecedorDAO = fornecedorDAO;
	}

	/**
	 * @return the requisicaoCompraProdutoService
	 */
	public IRequisicaoCompraProdutoService getRequisicaoCompraProdutoService() {
		return requisicaoCompraProdutoService;
	}

	/**
	 * @param requisicaoCompraProdutoService
	 *            the requisicaoCompraProdutoService to set
	 */
	public void setRequisicaoCompraProdutoService(IRequisicaoCompraProdutoService requisicaoCompraProdutoService) {
		this.requisicaoCompraProdutoService = requisicaoCompraProdutoService;
	}

}